home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The X-Philes (2nd Revision)
/
The X-Philes Number 1 (1995).iso
/
xphiles
/
hp48_1
/
symmat_c
< prev
next >
Wrap
Internet Message Format
|
1995-03-31
|
30KB
From: Carlos Ferraro <carlos@fy.chalmers.se>
Subject: v05i029: symmat_cf - Manipulate Symbolic Matrices v1.0, Part01/01
Newsgroups: comp.sources.hp48
Followup-To: comp.sys.hp48
Approved: spell@seq.uncwil.edu
Checksum: 3490516001 (verify with brik -cv)
Submitted-by: Carlos Ferraro <carlos@fy.chalmers.se>
Posting-number: Volume 5, Issue 29
Archive-name: symmat_cf/part01
BEGIN_DOC symmat.doc
Gothemburg, 1/6/1992
Hello everybody!
Disappointed by the lack of a good program for dealing with symbolic matrices,
I programmed one myself. I have studied different programming languages
like ML , Modula-2 and Turbo-Pascal, and most of all, I've spent hundreds of
hours optimizing Forth in the old 28C (because of it's stupidly little
memory). That's why I begun to program this set of utilities and programs
half a year ago and have been improving it constantly since then. For about
a month ago I had no part of the code left that could be improved. Seems that
every little row of the code is optimized ("upspeeded") to the possible
limit (using RPN Forth). I didn't want to use other languages because of
the always present possibility of failures in compatibility.
I've now achieved :
1) greatest possible speed "in the market"
2) most effektive, elegant and short code
3) completeness (all kind of tools)
4) free of bugs (well, well,...)
5) CEAP = (Complex Exam-Aware Program)
IT'S OBVIOUS THAT YOU MUST HAVE THE FLAGS -2 AND -3 CLEARED SO THAT
THE CALCULATOR IS ABLE TO HANDLE WITH SYMBOLS !!
BEFORE YOU DOWNLOAD IT, READ ALL THE INSTRUCTIONS AT THE BOTTOM OF
THIS TEXT (BELOW EXAMPLES) !!
For all the text down here, the following symbols will represent :
S1 = a symbolic matrix in the form of a list of lists, for ex. :
{ {a b 1} {0 a 2 } {b 1 3} } represents a matrix: [[a b 1]
[0 a 2]
[b 1 3]]
Q1 = like S1 but ALLWAYS quadratic.
V1 = a symbolic vector in the form of a list (wich I will call "simple" troughout the
instructions) or a list of one list,
for ex. : { '2*x' '1/y' z } or { { '2*x' '1/y' z } }
that is : [ '2*x' '1/y' z ]
sy = a symbol, f. ex. : 't' , 'k' , etc.
n = an integer
AVAILABLE PROGRAMS IN THE DIRECTORY SYMB :
( Sorry, this editor doesn't write greek symbols!! So (lambda) means
the corresponding greek symbol as you'll see it at the HP48 )
Power, (lambda)Eqv , Cross , M->L , L->M , AplyPrg , DetExCo
Inv , AXB , Mmult , Smult , ID , ADD , Transp , Jacobi , |^Stack
DetNN , D33 , D22 , Minor , ChCol , DelN , ->Mat .
You will also get a directory called OWN and a CST. Reasons for this
are given below.
INSTRUCTIONS:
In: Out:
1) Power - raises S1 to the power n 2:Q1
1:n 1:Q1^n
2) (lambda)Eqv - gives the characteristical equation of any of the
following inputs : a real (HP48) matrix (quadratic)
a complex (HP48) matrix "
a symb. matrix as described above.
This program is extremely usefull and you don't even need to convert your
real or complex matrix into a list (it is done automatically).
The equation you get is in (lambda) variable. Automatically the program stores the
following matrix : (S1-(lambda)*I) in the variable (lambda)Mat, where I is
the identity matrix, in the directory OWN, there the program ends. Why?
Because it's ugly to get a program directory full of variables!! Anyway, I
hope you weren't sleeping during the linear algebra lessons and understand
what I mean...
In: Out:
1: Q1 or (see above) 1: the char. equation (in OWN)
3) Cross - returns the cross-product of two symb. vectors, as a new symb. vector.
In: Out:
2:V1 1:V1 X V2
1:V2
4) M->L - converts a real or compl. matrix in HP48-shape into one in
"symbolic" shape (list of lists)
5) L->M - the opposite of M->L
6) AplyPrg - This is a "different" prog., in the means that it takes
a symb. matrix (or vector) and another program as its
arguments, and it applies the given prog. to the
matrix (or vector), element by element. This is especially
usefull when you want to have all the elements in a matrix
beautifully collected. or evaluated or whatever.
In: Out:
2:S1 1: (see above)
1:<< a Program here >>
7) DetExCo - This gives the determinant of a quadr. matrix fully collected.
In: Out:
1:Q1 1: (See above)
8) Inv - Gives the invers of a matrix using Cramer's rule.
If you wonder why the output is in this form, the answer is
speed and visual optimization.
In: Out:
1:Q1 2:The inverted matrix where each element has to be
divided by the determinant (I think
it's called the adjoint matrix (?) )
1:the determinant .
9) AXB - Solves the system of equations using the I-don't-remeber-what-
algorithm, but which is faster than taking the invers and
then multiplying with the vector.
In: Out:
2:V1 2:The solution-vector where each element has
to be divided by the determinant.
1:Q1 1:The determinant.
10) Mmult - Matrix multiplication. It's your responsability to check
the dimensions of the matrices.
In: Out:
2:S1 1:S1*S2
1:S2
11) Smult - Multiplies a matrix by a scalar (which can be a symbol as well).
In: Out:
2:S1 1: symbol*S1
1: (any symbol here)
12) ID - Makes an "identity matrix" with the given symbol as the
elements of the diagonal.
2: (any symbol) 1: (see above), size n*n
1:n
13) ADD - Addition of matrices, check dimensions.
2:S1 1:S1+S2
1:S2
14) Transp - Transponat of a matrix or vector, any dimensions!
1:S1 or V1 1: S1* or V1*
15) Jacobi - This program gives the functional matrix of an inputed
vector, i.e. the Jacobian matrix. This is extremely usefull
when you want to obtain the Jacobi-determinant to use it
for ex. in a two or three dimensional integration where you must
change coordinates!
This prog. is designed to work only with max. 3 dim.,
because it is what we normally use at the exams. That is
why you MUST have 3 variables of derivation in a list at level
1 !! If you use less variables input zeros instead!! For ex. { x y 0 } .
It's obvious that the elements of the vector must be differen-
tiable in terms of the variables in the list !!!!
Observe that you can choose any variables, but make shore that
they are empty or derivation won't work - sorry not my fault!
2:V1
1: { a list of three variables of derivation }
Out: 1: (the Jacobi-matrix)
All the other programs are functions used in these progs above.
DO NOT REMOVE ANY OF THEM !!!!
Most of them are also usefull independently, for ex. :
16) |^Stack - splits an S1 into its elements, corresponds to OBJ-> to normal matrices
but without giving the size of the S1.
In: S1 Out: (the elements in order in the stack)
17) DetNN - The determinant of an n*n matrix NOT COLLECTED.
18) D33 and D22 are the basic cases of DetNN.
19) Minor - The minor of a matrix. Used in Inv .
3: n1 (row position)
2: Q1 Out:
1: n2 (column position) 1: (the minor at that position)
20) ChCol - Substitutes one column of a matrix by another given.
Note that no check of simensions is done, because the program
who calls this function will never provide a vector of wrong size.
3: (a simple vector, NOT a list of one list)
2: S1
1: n (the column number to be replaced)
Out: (the "new" S1)
22) DelN - Deletes a given element of a list, i.e. deletes a row of an S1
or a column of a (simple) V1 .
2: S1 or V1
1: n Out: (the "new" list)
23) ->(lambda)Mat - Substitutes an eigenvalue in the (lambda)Mat and
evaluates it so that you can reduce this matrix
and get the eigenvectors. It is available from
the CST in OWN as well !!
1: n 1: (Q1-n*I)
EXAMPLES:
1) Calculate the 5:th power of the matrix : { { a b } { 0 a } }
In: Out:
2: { { a b } { 0 a } }
1: 5 1: { { 'a^5' '5*a^4*b' } { 0 'a^5' } }
The operation takes only about 4 seconds, but ExCo takes about 28 s.
Total time aprx. 32 seconds
2) Calculate the characteristical equation of the following matrix.
In: [ [1 0 1]
[2 4 3]
[6 .5 5] ]
Push (lambda)Eqv and you'll get
Out: '-4.5+10*(lambda)^2-(lambda)^3-21.5*(lambda)'
The program itself takes less then 3 seconds.
(The determinant takes only 0.7 seconds !!!!!! Beat if you can !!)
Again it's ExCo who takes time (27 seconds).
Using for ex. the grat polynom-solving program found in News you'll
get the eigenvalues of the matrix. As you then go back to OWN
(there is when you are when execution is ready) and use ->(lambda)Mat
you'll get the matrices there you can do some echelon and direct find
the eigenvectors. For ex. one eigenvalue here is 3.51064322082
In:3.51064322082
Press the CST-menu, press ->(lambda)Mat
and you'll get: { { -2.5106... 0 1 }
{ 2 0.4893... 3 }
{ 6 0.5 1.4893... } }
I'm sorry I haven't got a clearer example, but you have certainly
lots of them in your linear algebra books.
3) Taking the cross product of two vectors is really ease:
2: { a 0 q }
1: { 1 '2*a' '.5*q' } 1: { '-2*a*q' '.5*a*q+q' '2*a^2' }
The total execution time is 5.55 seconds, icluding ExCo !!!
4) Input [ [ 1 2 3 4 ] Press M->L and you get { { 1 2 3 4 }
[ 8 0 9 6 ] { 8 0 9 6 }
[ 3 5 7 1 ] ] { 3 5 7 1 } }
5) Suppose you have a symbolic matrix S1 with "ugly" terms like those
you get after multiplication. Then you do like this :
2: S1
1: 1 ( or 2 or << desired program >> )
Press AplyPrg and you'll get the matrix now with every term
fully collected ( if you entered a 1 at level 1 ). That is, AplyPrg
applies the desired program to every element of the matrix.
Inputting a 1 or a 2 instead of a program at level 1 are only
shortcuts to ExCo and FrColct.
6) FrColct works like this; suppose you have :
1: 'A/B/C*INV(G/H/I*INV(A/G/B/H/C/I))'
Pressing ExCo will return an expression full of "...^2" and "...^-2"
but pressin FrColct instead will return
1: 'A*A*H*I/(B*C*G*G*B*H*C*I)' in 1min. 41 sec.
That is : A^2/(B^2*C^2*G^2) . You may not find this example very well
thought, but as you experiment with ExCo and FrColct, you'll
find out they're a good complement to each other, specially when ExCo returns
an expression full of '.../INV(...INV(.../.../...))...' and so on.
7) Suppose you want to integrate the following function: f(x,y)=x^2+y^2
in an interval defined by: D={ (x,y) : x^2+y^2+2*x }. Then the following
substitution will be best to use: x= -1+r*COS(t) , y= r*SIN(t) .
Now you'll need to calculate the functional matrix and then the determinat
of that change of coordinates to use it in the integration. There's
when Jacobi comes in the picture. You need only to input a list with
the substitution expressions, and another one with the variables
to be used in the derivations, in this case:
In: 2: { '-1+r*COS(t)' 'r*SIN(t)' }
1: { r t 0 }
Why the zero as the third element in the list? As I explained
before, the program is designed to work with three variables,i.e.
it needs to have 3 elements in the list at level 1 !! Press Jacobi
and 2.15 seconds later you'll have the Jacobi-matrix in the stack.
Now you press DetExCo and get the collected determinant in 3.8 seconds,
That is 1: 'COS(t)^2*r+SIN(t)^2*r'
And cos(a)^2+sin(a)^2=1 so the answer is simply r !!
As I'm extremely tired of writing this program documentation, I hope you'll do
without more examples. If there's anything you wonder, here's my e-adress:
carlos@fy.chalmers.se
and here's my adress: Carlos Ferraro because I won't be here
Godhemsgatan 60 A very much during the summer.
414 68 GOTHEMBURG
SWEDEN Tel: +46 31 775 05 49
INSTRUCTIONS FOR DOWNLOADING:
You must have the following programs,( best if you have them at HOME), to run SYMB.
Notice that you must apply ASC-> to all of them !!
Once you have done this, the checksums and bytes will be :
FrColct : # 14123d 471
ExCo : # 30286d 61
SYMB : # 45696d 4303.5
END_DOC
BEGIN_RDME symmat.rdm
[
Make sure you load exco as ExCo.
Make sure you load frcolct as FrColct.
-chris ]
END_RDME
BEGIN_ASC ExCo.asc
%%HP: ;
"D9D20E16323C03278BF1EB3A194A0278BF1E0CF1DE032167E19B6323C03278BF
151A0278BF1E0CF1DE032167E19B63293632B2130E467"
END_ASC
BEGIN_ASC FrColct.asc
%%HP: ;
"D9D20E16323C03278BF13C03247A208BA2084E202062D6872B1B21308BA209C2
A284E202062D650FA1B2130B213095AF1DE0324B2A2279E19B6323C03247A208
BA2084E2020621684E2020622650FA184E2020623650FA1B21308BA2084E2020
621684E2020622684E20206236EEDA150FA1B2130B213095AF1DE0324B2A2279
E19B6323C03247A208BA2084E2020621684E2020622684E2020623650FA150FA
1B21308BA2084E2020621684E20206236EEDA184E2020622650FA1B2130B2130
95AF1DE0324B2A2279E19B6323C03247A208BA2084E2020623784E2020624750
FA184E20206257EEDA1B21308BA2084E2020625784E20206237EEDA184E20206
24750FA1B2130B213095AF1DE0324B2A2279E19B6323C03247A208BA2084E202
062D684E202062E684E202062F6EEDA184E2020620750FA1EEDA1B21308BA208
4E202062D684E202062E6EEDA184E202062F6EEDA184E2020620750FA1B2130B
213095AF1DE0324B2A2279E19B6323C03247A208BA2084E2020623784E202062
4784E20206257EEDA1EEDA1B21308BA2084E2020623784E20206247EEDA184E2
0206257EEDA1B2130B213095AF1DE0324B2A2279E19B632EB3A178BF1E0CF1DE
032167E19B63293632B2130B273"
END_ASC
Finally load this as SYMB :
BEGIN_ASC symb.asc
%%HP: ;
"69A20FF75EF1000000303435453047A2084E2040548734F684E2070642734F6C
6364784E20404556374784E2050D869D4164784E20701407C69705277684E205
0449435057384E20504494350543B2130F800050D869D4164750D9D20E163245
63284E20106997632DCC0284E204069D41647C9432D9D20E1632EB3A193632B2
13084E20701407C6970527764563284E20106997632EFE0293632B2130490004
04456C6E440D9D20E1632DBBF1B7FC178BF178BF13F2A276BA15BCF190DA1ED2
A276BA15BCF18DBF19C2A290DA1387C193632B2130B600050348634F6C650D9D
20E16321C432D6E20202416D6E20201426D6E2010E6E16329C2A2D6E20202416
8B9C10A132D6E201087D6E20202416D6E201087D6E20202416D6E2010876C7D1
D6E2010E6D6E20201426D6E2010876C7D1704D1704D145632D6E202024169763
2DCC02C4232D6E20202416EF53293632B21306F00050D496E6F62750D9D20E16
3284E20404456C6E478BF18B9C11C432D6E201036D6E20201427D6E20203596E
16329C2A2D6E202035960A132D6E2010E4D6E20201427D6E2010E46C7D1D6E20
103684E20404456C6E4C4232D6E20203596387C1EF53293632B2130DC0003044
232330D9D20E163284E20600935471636B6803A25BCF1EEDA13F2A20DCF1EEDA
190DA193632B2130450003044333330D9D20E163284E20600935471636B61C43
2D6E20202413D6E20202423D6E20202433D6E20202443D6E20202453D6E20202
463D6E20202473D6E20202483D6E20202493E1632D6E20202413D6E20202453E
EDA1D6E20202493EEDA1D6E20202413D6E20202463EEDA1D6E20202483EEDA19
0DA1D6E20202423D6E20202443EEDA1D6E20202493EEDA190DA1D6E20202423D
6E20202463EEDA1D6E20202473EEDA176BA1D6E20202433D6E20202443EEDA1D
6E20202483EEDA176BA1D6E20202433D6E20202453EEDA1D6E20202473EEDA19
0DA1EF53293632B2130EB10050445647E4E450D9D20E163278BF18B9C178BF19
C2A290DA11C432D6E20201416D6E201037D6E2020C696E1632D8732D9D20D6E2
010379C2A2279E18A732D9D20D6E20201416EB3A1EB3A1B21305DF22D6E20103
7ED2A2279E18A732D9D20D6E2020141684E2030442323B21305DF22D6E201037
3F2A2279E18A732D9D20D6E2020141684E2030443333B21305DF22D6E2010373
F2A2D5CE18A732D9D204B2A2D6E202014169C2A26C7D11C432D6E202024C6E16
329C2A2D6E2010370A132D6E2010E4ED2A2D6E2010370A132D6E201045D6E202
01416D6E2010456C7D1D6E2010E484E20404456C6E4C4232D6E2020C696387C1
3CE2278BF18B9C13F2A2D5CE1AFE2284E2050445647E4E45BF2284E203044333
35DF22D6E202024C6D6E2010E46C7D1EEDA1683A2D6E2010E49C2A276BA1D20B
1EEDA176BA1C4232EF532B21305DF22B21305DF22EF53293632B21300A200600
935471636B660D9D20E16321C432D6E20201416E16329C2A2D6E202014168B9C
10A132D6E2010E4D6E20201416D6E2010E46C7D1EB3A1C4232EF53293632B213
04800060A41636F6269660D9D20E16324B3C1EB3A11C432D6E20204687D6E202
04697D6E202046A7E1632B7FC11C432D6E2010A5E16329C2A2D6E2010A530132
78BF178BF1D6E20204687E7FE1E0CF1D6E20204697E7FE1E0CF13CE22D6E2010
A5ED2A2D5CE1AFE22D9D20D6E202046A7E7FE1B21305BF228DBF15DF22D6E201
0A5387C1D6E2010A55BCF1C4232D6E2010A5387C1EF532EF53293632B2130731
0060452716E6370760D9D20E163278BF18B9C192CF19C2A26C7D18B9C11C432D
6E2020D4D6D6E203027F677D6E203036F6C6E16329C2A2D6E203036F6C60A132
D6E202036E69C2A2D6E203027F6770A132D6E202027E6D6E2020D4D6D6E20202
7E66C7D1D6E202036E66C7D1C4232D6E203027F677387C1C4232D6E203036F6C
6387C1EF53293632B2130311003014444430D9D20E163292CF19C2A26C7D14B2
A24B2A21C432D6E20201416D6E20202426D6E20201413D6E20201637D6E20301
41337E16323CE22D6E2020141368BC1D13A2D9AE1AFE22D9D20D6E202014169C
2A2387C145632D6E2020141697632DCC02B21305DF223CE22D6E202024269C2A
26C7D168BC1D13A2D9AE1AFE22D9D20D6E202024269C2A2387C145632D6E2020
242697632DCC02B21305DF22D6E202014168B9C145632D6E2020163797632DCC
02D6E202014169C2A26C7D18B9C145632D6E203014133797632DCC029C2A2D6E
202016370A132D6E201025D6E20201416D6E2010256C7D1D6E20202426D6E201
0256C7D11C432D6E202014C4D6E202024C4E16329C2A2D6E20301413370A132D
6E201034D6E202014C4D6E2010346C7D1D6E202024C4D6E2010346C7D176BA1C
4232D6E2030141337387C1EF532C4232D6E20201637387C1EF53293632B21305
A20020944420D9D20E16321C432D6E20203597D6E2010E4E16329C2A2D6E2010
E40A132D6E2010259C2A2D6E2010E40A132D6E2010343CE22D6E201025D6E201
034279E1AFE22D6E202035975BF224B2A25DF22C4232D6E2010E4387C1C4232D
6E2010E4387C1EF53293632B21308D0005035D657C64750D9D20E163292CF18B
9C14B2A21C432D6E20201416D6E2010D4D6E201035D6E20203437E16323CE22D
6E202014169C2A26C7D178BF168BC1D13A2D9AE1AFE22D9D20D6E202014169C2
A2387C145632D6E2020141697632DCC02D6E20103545632D6E2020343797632D
CC028B9C145632D6E20103597632DCC02B21305BF22D9D208B9C145632D6E202
0343797632DCC02B21305DF229C2A2D6E2010350A132D6E201094D6E20201416
D6E2010946C7D11C432D6E20203436E16329C2A2D6E202034370A132D6E2010A
4D6E2010D4D6E20203436D6E2010A46C7D1EEDA1C4232EF532D6E20203437387
C1C4232D6E201035387C1EF53293632B21303020050D4D657C64750D9D20E163
21C432D6E20201416D6E20202426E1632D6E202014168B9C1D6E202024268B9C
1D6E202024269C2A26C7D18B9C11C432D6E2010C4D6E201034D6E201025E1632
9C2A2D6E2010C40A132D6E201094D6E20201416D6E2010946C7D11C432D6E202
0C494E16329C2A2D6E2010250A132D6E2010A44B2A29C2A2D6E2010340A132D6
E2010B4D6E2020C494D6E2010B46C7D1D6E20202426D6E2010B46C7D1D6E2010
A46C7D1EEDA176BA1C4232C4232D6E201025387C1EF532C4232D6E2010C4387C
1EF532EF53293632B2130CA1003014852430D9D20E163278BF18B9C192CF184E
2050445647E4E484E2040548734F61C432D6E20202426D6E20201416D6E20103
7D6E20204456E16323CE22D6E202044564B2A2167E1F88E1AFE22D9D203CE22D
6E202024269C2A26C7D168BC1D13A2279E1AFE22D9D20D6E20202426EB3A1456
32D6E2020242697632DCC02B21305DF22858A1C2A205200035F6C66796E676C2
0277169647E2E2E2ED2A2485A19C2A2D6E2010370A132D6E2010E4D6E2020141
6D6E20202426D6E2010E484E2050348634F6C684E2050445647E4E484E204054
8734F6C4232D6E201037387C1D6E20204456B21305BF22D9D20D6E20202426D6
E20201416C2A20F0000465647D3033F2A2485A1ED2A2F17A1B21305DF22EF532
93632B2130032003094E66730D9D20E163278BF184E2050445647E4E484E2040
548734F692CF18B9C11C432D6E20201416D6E20204456D6E201035E16323CE22
D6E202044564B2A2167E1F88E1AFE22D9D209C2A2D6E2010350A132D6E201094
9C2A2D6E2010350A132D6E2010A4D6E201094D6E20201416D6E2010A484E2050
D496E6F62784E2050445647E4E4683A2D6E201094D6E2010A476BA1D20B1EEDA
1C4232D6E201035387C1C4232D6E201035387C1D6E20204456B21305BF22D9D2
0D6E20201416C2A20F0000465647D3033F2A2485A1ED2A2F17A1B21305DF22EF
53293632B2130EB10070445647548734F670D9D20E163284E2050445647E4E48
58A1C2A20F10004456475627D6E20227561646979C2A2485A1C2A20F100034F6
C6C656364796E676E2E2E2ED2A2485A184E2040548734F693632B21307A00070
1407C69705277670D9D20E163292CF18B9C14B2A21C432D6E20201416D6E2020
0527D6E201035D6E20203437E1632D8732D9D20D6E202005279C2A2279E18A73
2D9D20C9432D9D20E163284E2040548734F693632B213045632D6E2020052797
632DCC02B21305DF22D6E20200527ED2A2279E18A732D9D20C9432D9D20E1632
84E2070642734F6C6364793632B213045632D6E2020052797632DCC02B21305D
F22B21305DF223CE22D6E202014169C2A26C7D168BC1D13A2D9AE1AFE22D9D20
D6E202014169C2A2387C145632D6E2020141697632DCC02D6E20103545632D6E
2020343797632DCC029C2A245632D6E20103597632DCC02B21305BF22D9D20D6
E202014169C2A26C7D18B9C145632D6E2020343797632DCC02B21305DF229C2A
2D6E2010350A132D6E201094D6E20201416D6E2010946C7D11C432D6E2020343
6E16329C2A2D6E202034370A132D6E2010A4D6E20203436D6E2010A46C7D1D6E
20200527EB3A1C4232EF532D6E20203437387C1C4232D6E201035387C1EF5329
3632B2130B030030C4D8D430D9D20E163278BF18B9C192CF19C2A26C7D18B9C1
1C432D6E20201416D6E201025D6E201034E16329C2A2D6E2010250A132D6E201
0E4D6E20201416D6E2010E46C7D1EB3A1C423247A20D6E201025D6E201034B21
30900D1EF53293632B21308C00030D4D8C430D9D20E16329C2A29C2A247A20B2
1301C432D6E201025D6E201034D6E2010C4E1632B7FC178BF13CE228B9C19C2A
2279E1AFE22D9D20EB3A145632D6E20103497632DCC02B21305BF22D9D20EB3A
145632D6E20103497632DCC0245632D6E20102597632DCC02B21305DF229C2A2
D6E2010250A132D6E2010E4D6E201034387C19C2A2387C145632D6E2010C4976
32B4402C4232D6E2010C4EF53293632B213094100503427F6373750D9D20E163
284E20600935471636B6803A25BCF184E20600935471636B61C432D6E2020241
3D6E20202423D6E20202433D6E20201413D6E20201423D6E20201433E1632D6E
20201423D6E20202433EEDA1D6E20201433D6E20202423EEDA190DA184E20405
48734F6D6E20201413D6E20202433EEDA1D6E20201433D6E20202413EEDA190D
A1599A184E2040548734F6D6E20201413D6E20202423EEDA1D6E20201423D6E2
0202413EEDA190DA184E2040548734F6EF5323F2A2387C193632B21300910040
6954176740D9D20E163278BF13CE2268BC178BF13F2A2279E1DBBF1803A2279E
1908E1AFE2284E2030D4D8C45DF2278BF18B9C11C432D6E20201416D6E2010E6
E1632D6E202014168BA2084E201069599A1B2130D6E2010E684E2020944484E2
03014444478BF184E2070445647548734F6DBBF1EF53284E2030F475E4456328
4E204069D4164797632DCC0293632B2130421005005F677562750D9D20E16321
C432D6E2020D416D6E2010E6E1632D6E2020D4169C2A2D6E2010E69C2A290DA1
30132D6E2020D41684E2050D4D657C647C4232EF532858A1C2A2071000D4E5E6
0227561646979C2A2485A1C2A20F100034F6C6C656364796E676E2E2E2ED2A24
85A19C2A284E20701407C69705277693632B21301010030F475E43069A20FF76
6100000004069D416474047A2047A208BA209C2A284E20106990DA1B21304B2A
29C2A2B213047A20ED2A28BA20803A284E20106990DA1B21303F2A2B213047A2
0233A23392099900000000000508BA20D13A284E20106990DA1B2130B2130B21
309B000205415208BA2033920000000000000054933920100000000000001084
E201069ED2A2D20B1EEDA176BA184E2010693F2A2D20B190DA13392010000000
0000512084E201069EEDA190DA1B21309900090549676566716C657569033920
00028022346015306244"
END_ASC
BYTES: #764Eh 52.5
BEGIN_UU ExCo.uue
begin 644 ExCo
M2%!(4#0X+46=+>!A(\,P<K@?OJ.1I""'^^'`'^TP$G8>N38R#".'^U&A((?[
0X<`?[3`2=AZY-I)C(RLQ`"LQ
`
end
sum -r/size 57040/109 section (from "begin" to "end")
sum -r/size 36661/61 entire input file
END_UU
BYTES: #372Bh 459.5
BEGIN_UU FrColct.uue
begin 644 FrColct
M2%!(4#0X+46=+>!A(\,P<K@?PS!"IP*X*H#D`@(F;7BRL1(#N"J0+"I(+B!@
MTE;P&BLQL!(#6?K1#B.THB*7'KDV,@PC="J`JP)(+B!@$H;D`@(F8@6O@>0"
M`B9C!:^Q$@.X*H#D`@(F84@N(&`BAN0"`B9C[JU1\!HK,;`2`UGZT0XCM*(B
MEQZY-C(,(W0J@*L"2"X@8!*&Y`(")F)(+B!@,E;P&@6OL1(#N"J`Y`(")F%(
M+B!@,N;>&D@N(&`B5O`:*S&P$@-9^M$.([2B(I<>N38R#"-T*H"K`D@N(&`R
MA^0"`B9T!:^!Y`(")G7NK;$2`[@J@.0"`B9U2"X@8#+GWAI(+B!@0E?P&BLQ
ML!(#6?K1#B.THB*7'KDV,@PC="J`JP)(+B!@TH;D`@(F;D@N(RYMX:2"X@
M8`)7\!KNK;$2`[@J@.0"`B9M2"X@8.+FWAI(+B!@\N;>&D@N(&`"5_`:*S&P
M$@-9^M$.([2B(I<>N38R#"-T*H"K`D@N(&`RA^0"`B9T2"X@8%+GWAKNK;$2
M`[@J@.0"`B9S2"X@8$+GWAI(+B!@4N?>&BLQL!(#6?K1#B.THB*7'KDVXCL:
2A_OAP!_M,!)V'KDVDF,C*S$`
`
end
sum -r/size 33200/670 section (from "begin" to "end")
sum -r/size 31711/468 entire input file
END_UU
BYTES: #4426h 4296.0
BEGIN_UU symb.uue
begin 644 symb
M2%!(4#0X+466*O!_Y1\````#0U-4`W0J@.0"!$5X0V](+G!@)#?TQC9&A^0"
M!%1E<W1(+E#0:-D41H?D`@=!<&QY4')G2"Y00)0T!76#Y`(%1$E34#0K,?`(
M``6-EDUA=`6=+>!A(U0V@N0"`99Y-M+,($@N0 %$;'22.=+>!A([ZCD6,C
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
M`4@N$I+2HML.'>&F>K@>0"`9;SHM("&PFM,9,"`0``````%0)(+A!@Z=X:
=":VQ$@.9`)!0E'969A?&5E>6,),"`"`((D,&40,&
`
end
sum -r/size 57233/5953 section (from "begin" to "end")
sum -r/size 33671/4304 entire input file
END_UU